package si.banst.tecajnice.entitete;

import static javax.persistence.EnumType.STRING;
import static javax.persistence.TemporalType.TIMESTAMP;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;

@Entity
@NamedQueries({ @NamedQuery(name = "vrniVseVrsteTecajnic", query = "SELECT vr FROM VrstaTecajnice vr") })
@Cacheable
public class VrstaTecajnice implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	private int sifraVrsteTecajnice;

	@Temporal(TIMESTAMP)
	private Date datumCasSpremembe;

	private String nazivVrsteTecajnice;

	@OneToOne
	private VrstaTecajnice osnovaZaPreracun;

	private String referent;

	@Enumerated(STRING)
	private StatusAktivnosti statusAktivnosti;

	@OneToMany(mappedBy = "vrstaTecajnice")
	private List<Tecajnica> tecajnice;

	@OneToMany(mappedBy = "vrstaTecajnice", fetch = FetchType.EAGER)
	private List<Ponder> ponderji;

	public VrstaTecajnice() {
		super();
	}

	public int getSifraVrsteTecajnice() {
		return sifraVrsteTecajnice;
	}

	public void setSifraVrsteTecajnice(int sifraVrsteTecajnice) {
		this.sifraVrsteTecajnice = sifraVrsteTecajnice;
	}

	public Date getDatumCasSpremembe() {
		return datumCasSpremembe;
	}

	public void setDatumCasSpremembe(Date datumCasSpremembe) {
		this.datumCasSpremembe = datumCasSpremembe;
	}

	public String getNazivVrsteTecajnice() {
		return nazivVrsteTecajnice;
	}

	public void setNazivVrsteTecajnice(String nazivVrsteTecajnice) {
		this.nazivVrsteTecajnice = nazivVrsteTecajnice;
	}

	public VrstaTecajnice getOsnovaZaPreracun() {
		return osnovaZaPreracun;
	}

	public void setOsnovaZaPreracun(VrstaTecajnice osnovaZaPreracun) {
		this.osnovaZaPreracun = osnovaZaPreracun;
	}

	public String getReferent() {
		return referent;
	}

	public void setReferent(String referent) {
		this.referent = referent;
	}

	public StatusAktivnosti getStatusAktivnosti() {
		return statusAktivnosti;
	}

	public void setStatusAktivnosti(StatusAktivnosti statusAktivnosti) {
		this.statusAktivnosti = statusAktivnosti;
	}

	public List<Tecajnica> getTecajnice() {
		return tecajnice;
	}

	public void setTecajnice(List<Tecajnica> tecajnice) {
		this.tecajnice = tecajnice;
	}

	public List<Ponder> getPonderji() {
		return ponderji;
	}

	public void setPonderji(List<Ponder> ponderji) {
		this.ponderji = ponderji;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + sifraVrsteTecajnice;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof VrstaTecajnice))
			return false;
		VrstaTecajnice other = (VrstaTecajnice) obj;
		if (sifraVrsteTecajnice != other.sifraVrsteTecajnice)
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "VrstaTecajnice [sifraVrsteTecajnice=" + sifraVrsteTecajnice
				+ ", datumCasSpremembe=" + datumCasSpremembe
				+ ", nazivTecajneListe=" + nazivVrsteTecajnice
				+ ", osnovaZaPreracun=" + osnovaZaPreracun + ", referent="
				+ referent + ", statusAktivnosti=" + statusAktivnosti + "]";
	}

}